#include <cstdlib>
#include <clocale>
#include <cstring>
#include <cstdio>

#include <iostream>

#include "cliente.h"
#include "conta_simples.h"
#include "conta_especial.h"

using namespace std;

#define MAX_CLIENTE  (int(10))
#define MAX_CONTA    (int(100))

cliente *array_cliente[MAX_CLIENTE] = { 0 };
conta_simples *array_conta[MAX_CONTA] = { 0 };

unsigned contador_conta = 0;
unsigned contador_cliente = 0;

int main(int argc, char *argv[])
{

    int opcao;

    setlocale(LC_ALL, "");	// Corrige acentuação

    do {
	//Menu do programa
	system("cls");
	cout << "\n\tSistema Bancário 1.0\n\tBy Lorran Garcia\n\n" <<
	    endl;
	cout << "\n\t*** Operações de Cliente ***" << endl;
	cout <<
	    "\n\t[01] - Criar Cliente\n\t[02] - Consultar Cliente\n\t[03] - Excluir Cliente\n\t[04] - Listar Clientes"
	    << endl;
	cout << "\n\t*** Operações de Conta ***" << endl;
	cout <<
	    "\n\t[05] - Criar Conta Simples\n\t[06] - Criar Conta Especial\n\t[07] - Excluir Conta\n\t[08] - Listar Contas"
	    << endl;
	cout << "\n\t*** Movimentações de Conta ***" << endl;
	cout <<
	    "\n\t[09] - Depositar\n\t[10] - Sacar\n\t[11] - Obter Saldo\n\t[12] - Transferir"
	    << endl;
	cout << "\n\t ******\n\t[13] - Sair" << endl;
	cout << "\n\tDigite Uma Opção: ";

	fflush(stdin);

	// Valida opção do menu e chama operação conforme escolhido
	switch (cin.get()) {
	    // Opção Criar Cliente
	case '1':{
		std::string str_nome;
		unsigned long u_cpf;

		cout << "\n\tDigite o Nome do Cliente:" << endl;
		cin >> str_nome;
		cout << "\n\tDigite o CPF:" << endl;
		cin >> u_cpf;

		array_cliente[contador_cliente] =
		    new cliente(str_nome, u_cpf, (contador_cliente + 1));
		if (array_cliente[contador_cliente] != (cliente *) NULL) {
		    contador_cliente++;
		    cout << "Cliente [" << contador_cliente << "]: " << str_nome << ", "
			<< u_cpf << endl;
		} else {
		    cerr << "Cliente não pode ser criado -";
		    perror("");
		}

		break;
	    }

	    // Opção Subtração
	case '2':{
		for (int i = 0; i < contador_cliente; i++)
		    array_cliente[i]->show();

		char p = cin.get();
		break;
	    }

	    // Opção Multiplicação
	case '3':{

		system("pause > null");
		break;
	    }

	    // Opção Divisão
	case '4':{

		system("pause > null");
		break;
	    }
	    // Função Módulo
	case '5':{

		system("pause > null");
		break;
	    }
	    // Força saída do Switch e do laço do-while saindo do programa
	case 'C':{
		cout << "\n\t Saindo..." << endl;
		break;
	    }
	    // Valida se a opção estiver errada
	default:{
		cout << "\n\tOpção Inválida" << endl;
		//_sleep(2000);
	    }

	}
	system("pause > null");
    }
    while (opcao != 13);

    system("pause > null");

    return EXIT_SUCCESS;

}
